#ifndef _PARSER
#define _PARSER

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;

const string charNum = "0123456789";
const string charOp = "+*";
const string charAccept = "()-" + charOp + charNum;

/*
    Pour toutes ces fonctions, la variable verbose permet d'afficher des information supplémentaires
    lors de l'éxecution, principalement utiles au débuggage
*/

size_t finParenthese (string expression);
/* retourne la position de la première parenthése fermante qui est au même niveau que de la première parenthése ouvrante
l'expression doit commencer par une parenthése ouvrante, celle ci étant la parenthése ouvrante dont on chreche la parenthése fermante */

string enleveChar(string expression, const char element);
/* renvoie une copie de expression en enlevant toutes les occurences du caractère element passé en paramètre */

string enleveParentheseAutour(string expression, bool verbose = false);
/* si la chaine expression est entouré de parenthéses, renvoie la chaine sans ces parenthèses */

bool verifieExpressionPolonaise(string expression, bool verbose = false);
/* verifie si une chaine passé en paramètre est une expression polonaise inversée */

bool verifieExpression(string expression, bool verbose = false);
/* verifie si une chaine passé en paramètre est une expression */

string ajouteMult(string expression, bool verbose = false);
/* ajout des * à une expression
    ex : 1(3+2) -> 1*(3+2)
*/

string ajoutParenthese(string expression, bool verbose = false);
/* ajoute des parenthéses autour des valeurs */

string transformeExpression(const string expression, bool verbose = false);
/* transforme une expression en expression polonaise inversée
    ATTENTION EN L'UTILISANT : PAS TERMINEE */

#endif
